package cn.kingshion.tree;

public class BinaryTreeDemo {
    public static void main(String[] args) {

        //创建树节点
        HeroNode root = new HeroNode(0,"root");
        HeroNode node1 = new HeroNode(1,"node1");
        HeroNode node2 = new HeroNode(2,"node2");
        HeroNode node3 = new HeroNode(3,"node3");
        HeroNode ndoe4 = new HeroNode(4,"ndoe4");
        HeroNode node5 = new HeroNode(5,"node5");
        HeroNode node6 = new HeroNode(6,"node6");

        //创建一个Tree
        BinaryTree binaryTree = new BinaryTree();

        root.setLeft(node1);
        node1.setLeft(node2);
        node2.setRight(node3);
        root.setRight(ndoe4);
        ndoe4.setRight(node5);
        node5.setLeft(node6);

        binaryTree.setRoot(root);


        System.out.println("先序遍历：");
        binaryTree.preOrder();



        System.out.println("中序遍历：");
        binaryTree.infixOrder();


        System.out.println("后序遍历：");
        binaryTree.postOrder();
    }


}

class BinaryTree {
    private HeroNode root;

    public void setRoot(HeroNode root) {
        this.root = root;
    }

    //    先序遍历
    public void preOrder() {
        if (this.root != null) {
            this.root.preOrder();
        } else {
            System.out.println("二叉树为空，无法遍历");
        }
    }

    //    中序遍历
    public void infixOrder() {
        if (this.root != null) {
            this.root.infixOrder();
        } else {
            System.out.println("二叉树为空，无法遍历");
        }
    }

    //    后序遍历
    public void postOrder() {
        if (this.root != null) {
            this.root.postOrder();
        } else {
            System.out.println("二叉树为空，无法遍历");
        }
    }


}

class HeroNode {
    private int no;
    private String name;
    private HeroNode left; //默认null
    private HeroNode right;  //默认null

    public HeroNode(int no, String name) {
        super();
        this.no = no;
        this.name = name;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public HeroNode getLeft() {
        return left;
    }

    public void setLeft(HeroNode left) {
        this.left = left;
    }

    public HeroNode getRight() {
        return right;
    }

    public void setRight(HeroNode right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }


    //先序遍历
    public void preOrder() {
        System.out.println(this);
        if (this.left != null) {
            this.left.preOrder();
        }
        if (this.right != null) {
            this.right.preOrder();
        }
    }

    //中序遍历
    public void infixOrder() {
        if (this.left != null) {
            this.left.infixOrder();
        }
        System.out.println(this);
        if (this.right != null) {
            this.right.infixOrder();
        }
    }

    //后序遍历
    public void postOrder() {
        if (this.left != null) {
            this.left.postOrder();
        }
        if (this.right != null) {
            this.right.postOrder();
        }
        System.out.println(this);
    }

}